package com.itheima.controller;
import com.itheima.entity.Dept;
import com.itheima.entity.Result;
import com.itheima.service.DeptService;
import jakarta.servlet.http.HttpServletRequest;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/*
    请求处理类

    部门列表查询
* */

@RestController
@RequestMapping("/depts")
@Slf4j

public class Deptcontroller {

    //一：第一版

//    @RequestMapping("/depts")
//
//    public List<Dept> getall(){
//
//        //1.加载并读取dept.txt
//        //通过类加载器可以获得路径下的所有资源
//        InputStream input = this.getClass().getResourceAsStream("/dept.txt");
//        List<String> strings = IOUtils.readLines(input, "UTF-8");
//
//        //2.解析文本中的数据，并将其封装成集合
//        List<Dept> depts = strings.stream().map((str) -> {
//            String[] parts = str.split(",");
//            Integer id = Integer.valueOf(parts[0]);
//            String name = parts[1];
//            LocalDateTime updateTime = LocalDateTime.parse(parts[2], DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
//            return new Dept(id, name, updateTime);
//        }).toList();
//
//        //3.响应数据
//        return depts;

    //二:第二版

//    @RequestMapping(value = "/depts",method = RequestMethod.GET)
//    @GetMapping("/depts")  //限制请求方式为get
//    public Result getall(){
//
//        //1.加载并读取dept.txt
//        //通过类加载器可以获得路径下的所有资源
//        InputStream input = this.getClass().getResourceAsStream("/dept.txt");
//        List<String> strings = IOUtils.readLines(input, "UTF-8");
//
//        //2.解析文本中的数据，并将其封装成集合
//        List<Dept> depts = strings.stream().map((str) -> {
//            String[] parts = str.split(",");
//            Integer id = Integer.valueOf(parts[0]);
//            String name = parts[1];
//            LocalDateTime updateTime = LocalDateTime.parse(parts[2], DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
//            return new Dept(id, name, updateTime);
//        }).toList();
//
//        //3.响应数据
//        return Result.success(depts);


        //三：第三版

//    @RequestMapping(value = "/depts",method = RequestMethod.GET)

//    private DeptService deptServiceImpl = new DeptServiceImpl();

    @Autowired //从IOC容器中，自动寻找bean对象，为该变量赋值---依赖注入DI的实现


    private DeptService deptService;

    @GetMapping //限制请求方式为get
    public Result list(){

        //1.加载并读取dept.txt
        //通过类加载器可以获得路径下的所有资源
        List<Dept> depts = deptService.list();

        //2.解析文本中的数据，并将其封装成集合

        //3.响应数据
        return Result.success(depts);

    }


//    方法一：
// 原始方式获取请求数据
//    @DeleteMapping("/depts")
//    public Result delete(HttpServletRequest  request){
//        String id = request.getParameter("id");
//        int i = Integer.parseInt(id);
//        System.out.printf("id="+i);
//
//        return Result.success();
//    }
//

    //方法二:

    //通过spring提供的@RequestParam注解，获取请求参数
    // @RequestParam 加上之后，前端传递的参数名必须与@RequestParam注解的value值一致
    @DeleteMapping

//    public Result delete(@RequestParam("id") Integer id){

    public Result delete(Integer id){

        System.out.printf("deptid="+id);

        //1.调用service的删除方法，删除部门
        deptService.delete(id);

        return Result.success();

    }

    /**
     *  新增部门
     * @param dept
     * @return
     */

    //@RequestBody 用来接受json格式数据
    @PostMapping
    public Result save(@RequestBody Dept dept){

        System.out.printf("dept="+dept);

        try {
            deptService.save(dept);
        } catch (Exception e) {
            return Result.error("出错了----");
        }

        return Result.success();

    }


    /**
     * 回显
     * @param id
     * @return
     */
    //@PathVariable 用来获取路径中的参数
    @GetMapping("/{id}")
    public Result getByID(@PathVariable Integer id){

        System.out.printf("id="+id);

        //1.调用service方法，根据id查询部门
        Dept dept = deptService.getById(id);

        return Result.success(dept);

    }

    /**
     * 修改部门
     * @param dept
     * @return
     */
    @PutMapping
    public Result update(@RequestBody Dept dept){

        System.out.printf("dept="+dept);

        deptService.update(dept);

        return Result.success();

    }



}


































